//
//  LKAnalytics.m
//  CaughtException
//
//  Created by Eric MiAo on 16/9/7.
//  Copyright © 2016年 MiAo. All rights reserved.
//

#import "LKAnalytics.h"
#import "LKAnalyticesAction.h"

@implementation LKAnalytics

+ (void)setExceptionHandle {
    [LKCaughtExceptionHandler setDefaultHandler];
}

#pragma mark basics

+ (void)developmentEnvironmentWithUrlPrefix:(NSString *)url {
    [[LKAnalyticesAction sharedAction] developmentEnvironmentWithUrlPrefix:url];
}

/** 初始化运璟统计模块
 @param appKey 运璟appKey.
 */
+ (void)startWithAppkey:(NSString *)appKey {
    
    [[LKAnalyticesAction sharedAction] startWithAppkey:appKey reportPolicy:BATCH userInfo:@""];
}

/** 初始化运璟统计模块
 @param appKey 运璟appKey.
 @param reportPolicy 发送策略, 默认值为：BATCH，即“启动发送”模式
 */
+ (void)startWithAppkey:(NSString *)appKey reportPolicy:(ReportPolicy)rp {
    [[LKAnalyticesAction sharedAction] startWithAppkey:appKey reportPolicy:rp userInfo:@""];
}

+ (void)startWithAppkey:(NSString *)appKey reportPolicy:(ReportPolicy)rp userInfo:(NSString *)userInfo {
    [[LKAnalyticesAction sharedAction] startWithAppkey:appKey reportPolicy:rp userInfo:userInfo];
}

/** 当reportPolicy == SEND_INTERVAL 时设定log发送间隔
 @param second 单位为秒,最小90秒,最大86400秒(24hour).
 @return void.
 */
+ (void)setLogSendInterval:(double)second {
    [[LKAnalyticesAction sharedAction] setLogSendInterval:second];
}

/** 设置日志延迟发送
 @param second 设置一个[0, second]范围的延迟发送秒数，最大值1800s.
 @return void
 */
+ (void)setLatency:(NSInteger)second {
    [[LKAnalyticesAction sharedAction] setLatency:second];
}

///---------------------------------------------------------------------------------------
/// @name  页面计时
///---------------------------------------------------------------------------------------

/** 手动页面时长统计, 记录某个页面展示的时长.
 @param pageName 统计的页面名称.
 @param seconds 单位为秒，int型.
 @return void.
 */
+ (void)logPageView:(NSString *)pageName seconds:(NSInteger)seconds {
    [[LKAnalyticesAction sharedAction] logPageView:pageName seconds:seconds];
}

/** 自动页面时长统计, 开始记录某个页面展示时长.
 使用方法：必须配对调用beginLogPageView:和endLogPageView:两个函数来完成自动统计，若只调用某一个函数不会生成有效数据。
 在该页面展示时调用beginLogPageView:，当退出该页面时调用endLogPageView:
 @param pageName 统计的页面名称.
 @return void.
 */
+ (void)beginLogPageView:(NSString *)pageName {
    [[LKAnalyticesAction sharedAction] beginLogPageView:pageName];
}

/** 自动页面时长统计, 结束记录某个页面展示时长.
 使用方法：必须配对调用beginLogPageView:和endLogPageView:两个函数来完成自动统计，若只调用某一个函数不会生成有效数据。
 在该页面展示时调用beginLogPageView:，当退出该页面时调用endLogPageView:
 @param pageName 统计的页面名称.
 @return void.
 */
+ (void)endLogPageView:(NSString *)pageName {
    [[LKAnalyticesAction sharedAction] endLogPageView:pageName];
}

#pragma mark event logs

///---------------------------------------------------------------------------------------
/// @name  事件统计
///---------------------------------------------------------------------------------------

/** 自定义事件,数量统计.
 使用前，请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID，然后在工程中传入相应的事件ID
 @param  eventId 网站上注册的事件Id.
 @return void.
 */
+ (void)event:(NSString *)eventId {
    [[LKAnalyticesAction sharedAction] event:eventId label:eventId attributes:nil];
}

/** 自定义事件,数量统计.
 使用前，请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID，然后在工程中传入相应的事件ID
 
 @param  eventId 网站上注册的事件Id.
 @param  label 分类标签。不同的标签会分别进行统计，方便同一事件的不同标签的对比,为nil或空字符串时后台会生成和eventId同名的标签.
 @return void.
 */
+ (void)event:(NSString *)eventId label:(NSString *)label {
    [[LKAnalyticesAction sharedAction] event:eventId label:label attributes:nil];
}

/** 自定义事件,数量统计.
 使用前，请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID，然后在工程中传入相应的事件ID
 
 @param  eventId 网站上注册的事件Id.
 @param  label 分类标签。不同的标签会分别进行统计，方便同一事件的不同标签的对比,为nil或空字符串时后台会生成和eventId同名的标签.
 @param  attributes 参数。进行事件统计的同时加入参数.
 @return void.
 */
+ (void)event:(NSString *)eventId label:(NSString *)label attributes:(NSDictionary *)attributes {
    [[LKAnalyticesAction sharedAction] event:eventId label:label attributes:attributes];
}

/** 调试模式
 一般不使用，当上传的数据有异常时可开启
 
 */
+ (void)debugModel {
    [[LKAnalyticesAction sharedAction] debugModel];
}
@end
